﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace LWH.ByteProtocol
{
    /// <summary>
    /// Xml属性，与StringProperty不一样的地方是，采用缓存对读进行性能优化，因此不要直接修改StringProperty中的值
    /// 但是注意由于缓存读和延迟写两个性能优化存在冲突，无法在同一个类同时实现，因此写部分并没有优化，
    /// 如果需要延迟写入需要重新实现一个XmlProperty专门用于写入，然后重写其getData进行优化
    /// 
    /// 待测试
    /// </summary>
    class XmlProperty : WrapperAbstractProperty
    {
        XmlDocument mXmlDoc;
        public XmlProperty(StringValueProperty wrappedProperty) : base(wrappedProperty)
        {
        }

        public XmlDocument getXmlDoc()
        {
            if (mXmlDoc == null)
            {
                mXmlDoc = new XmlDocument();
                mXmlDoc.LoadXml(((StringValueProperty)getWrappedProperty()).getValue());
            }
            return mXmlDoc;
        }

        public void setXmlDoc(XmlDocument value)
        {
            mXmlDoc = value;
            ((StringValueProperty)getWrappedProperty()).setValue(mXmlDoc.OuterXml);
        }

        //public XmlDocument Value
        //{
        //    get
        //    {
        //        if (mXmlDoc == null)
        //        {
        //            mXmlDoc = new XmlDocument();
        //            mXmlDoc.LoadXml(((StringValueProperty)getWrappedProperty()).Value);
        //        }
        //        return mXmlDoc;
        //    }

        //    set
        //    {
        //        mXmlDoc = value;
        //        ((StringValueProperty)getWrappedProperty()).Value = mXmlDoc.OuterXml;
        //    }
        //}

    }
}
